home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-06-28 | 5.8 KB | 205 lines | [TEXT/CWIE] |
- // KeyMessageMaker.cp
-
- #ifndef KeyMessageMaker_h
- #include "KeyMessageMaker.h"
- #endif
- #ifndef TypingMessage_h
- #include "TypingMessage.h"
- #endif
- #ifndef FunctionKeyMessage_h
- #include "FunctionKeyMessage.h"
- #endif
- #ifndef CommandKeyMessage_h
- #include "CommandKeyMessage.h"
- #endif
- #ifndef SpecialKeyMessage_h
- #include "SpecialKeyMessage.h"
- #endif
- #ifndef SingleAllocator_h
- #include "SingleAllocator.h"
- #endif
- #ifndef VerticalArrows_h
- #include "VerticalArrows.h"
- #endif
- #ifndef Undoing_h
- #include "Undoing.h"
- #endif
- #ifndef Typing_h
- #include "Typing.h"
- #endif
- #ifndef TabKeys_h
- #include "TabKeys.h"
- #endif
- #ifndef Scrolling_h
- #include "Scrolling.h"
- #endif
- #ifndef ReturnKeys_h
- #include "ReturnKeys.h"
- #endif
- #ifndef HorizontalArrows_h
- #include "HorizontalArrows.h"
- #endif
- #ifndef HelpKeys_h
- #include "HelpKeys.h"
- #endif
- #ifndef FunctionKeys_h
- #include "FunctionKeys.h"
- #endif
- #ifndef EscapeKeys_h
- #include "EscapeKeys.h"
- #endif
- #ifndef Editing_h
- #include "Editing.h"
- #endif
- #ifndef DeleteKeys_h
- #include "DeleteKeys.h"
- #endif
- #ifndef StopKeys_h
- #include "StopKeys.h"
- #endif
- #ifndef KeyEvent_h
- #include "KeyEvent.h"
- #endif
-
- #define MaxSize2(A,B) ( (sizeof(A)>sizeof(B)) ? sizeof(A) : sizeof(B) )
- #define MaxSize4(A,B,C,D) ( (MaxSize2(A,B)>MaxSize2(C,D) ? MaxSize2(A,B) : MaxSize2(C,D) ) )
- #define MaxSize8(A,B,C,D,E,F,G,H) ( (MaxSize4(A,B,C,D)>MaxSize4(E,F,G,H) ? MaxSize4(A,B,C,D) : MaxSize4(E,F,G,H) ) )
- #define MaxSize16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q) \
- ( (MaxSize8(A,B,C,D,E,F,G,H)>MaxSize8(I,J,K,L,M,N,P,Q) ? MaxSize8(A,B,C,D,E,F,G,H) : MaxSize8(I,J,K,L,M,N,P,Q) ) )
-
- #define maxMessageSize MaxSize16( TypingMessage, FunctionKeyMessage, CommandKeyMessage, \
- SpecialKeyMessage<EscapeKeys>, SpecialKeyMessage<Editing>, \
- SpecialKeyMessage<Scrolling>, SpecialKeyMessage<StopKeys>, \
- SpecialKeyMessage<TabKeys>, SpecialKeyMessage<ReturnKeys>, \
- SpecialKeyMessage<DeleteKeys>, SpecialKeyMessage<HelpKeys>, \
- SpecialKeyMessage<Undoing>, SpecialKeyMessage<VerticalArrows>, \
- SpecialKeyMessage<HorizontalArrows>, \
- TypingMessage, TypingMessage )
-
- KeyMessage& KeyMessageMaker::MakeKeyMessage( const KeyEvent& event )
- {
- static SingleAllocator< KeyMessage, maxMessageSize > storage;
- storage.DeleteAll();
-
- if ( !event.Key().Special() )
- {
- if ( event.Command() )
- return *new(storage) CommandKeyMessage( event.Key() );
- else
- return *new(storage) TypingMessage( event.Key() );
- }
-
- switch ( event.Key().Code() )
- {
- case Key::returnKey:
- return *new(storage) SpecialKeyMessage< ReturnKeys >( &ReturnKeys::ReturnKey );
-
- case Key::tabKey:
- return *new(storage) SpecialKeyMessage< TabKeys >( event.Shift()
- ? &TabKeys::TabBackward
- : &TabKeys::TabForward );
-
- case Key::deleteKey:
- return *new(storage) SpecialKeyMessage< DeleteKeys >( event.Shift()
- ? &DeleteKeys::DeleteForward
- : &DeleteKeys::DeleteBackward );
-
- case Key::escapekey:
- return *new(storage) SpecialKeyMessage< EscapeKeys >( &EscapeKeys::EscapeKey );
-
- case Key::clearKey:
- return *new(storage) SpecialKeyMessage< Editing >( &Editing::Clear );
-
- case Key::enterKey:
- return *new(storage) SpecialKeyMessage< ReturnKeys >( &ReturnKeys::EnterKey );
-
- case Key::function5:
- return *new(storage) FunctionKeyMessage( 5 );
-
- case Key::function6:
- return *new(storage) FunctionKeyMessage( 6 );
-
- case Key::function7:
- return *new(storage) FunctionKeyMessage( 7 );
-
- case Key::function3:
- return *new(storage) SpecialKeyMessage< Editing >( &Editing::Copy );
-
- case Key::function8:
- return *new(storage) FunctionKeyMessage( 8 );
-
- case Key::function9:
- return *new(storage) FunctionKeyMessage( 9 );
-
- case Key::function11:
- return *new(storage) FunctionKeyMessage( 11 );
-
- case Key::function13:
- return *new(storage) FunctionKeyMessage( 13 );
-
- case Key::function14:
- return *new(storage) FunctionKeyMessage( 14 );
-
- case Key::function10:
- return *new(storage) FunctionKeyMessage( 10 );
-
- case Key::function12:
- return *new(storage) FunctionKeyMessage( 12 );
-
- case Key::function15:
- return *new(storage) FunctionKeyMessage( 15 );
-
- case Key::helpKey:
- return *new(storage) SpecialKeyMessage< HelpKeys >( &HelpKeys::HelpKey );
-
- case Key::homeKey:
- return *new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::Home );
-
- case Key::pageUpKey:
- return *new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::PageUp );
-
- case Key::forwardDeleteKey:
- return *new(storage) SpecialKeyMessage< DeleteKeys >( event.Shift()
- ? &DeleteKeys::DeleteBackward
- : &DeleteKeys::DeleteForward );
-
- case Key::function4:
- return *new(storage) SpecialKeyMessage< Editing >( &Editing::Paste );
-
- case Key::endKey:
- return*new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::End );
-
- case Key::function2:
- return *new(storage) SpecialKeyMessage< Editing >( &Editing::Cut );
-
- case Key::pageDownKey:
- return *new(storage) SpecialKeyMessage< Scrolling >( &Scrolling::PageDown );
-
- case Key::function1:
- return *new(storage) SpecialKeyMessage< Undoing >( &Undoing::UndoOrRedo );
-
- case Key::leftArrow:
- return *new(storage) SpecialKeyMessage< HorizontalArrows >( &HorizontalArrows::LeftArrow );
-
- case Key::rightArrow:
- return *new(storage) SpecialKeyMessage< HorizontalArrows >( &HorizontalArrows::RightArrow );
-
- case Key::downArrow:
- return *new(storage) SpecialKeyMessage< VerticalArrows >( &VerticalArrows::DownArrow );
-
- case Key::upArrow:
- return *new(storage) SpecialKeyMessage< VerticalArrows >( &VerticalArrows::UpArrow );
-
- case Key::power:
- Assert( 0 );
- break;
-
- case Key::stopKey:
- return *new(storage) SpecialKeyMessage< StopKeys >( &StopKeys::StopKey );
- break;
- }
-
- Assert( 0 );
- return *new(storage) TypingMessage( event.Key() );
- }
-